与 AR Foundation 协同工作

什么情况下需要使用AR Foundation

Unity AR Foundation封装了一些跨平台的运动跟踪能力,请阅读 运动跟踪与EasyAR功能 来了解EasyAR功能与运动跟踪的关系,以及是否需要和什么时候需要使用AR Foundation。

EasyAR 支持的 AR Foundation 版本

EasyAR Sense Unity Plugin 支持 AR Foundation 4.1.3 或更新版本。

AR Foundation的支持是通过EasyAR Sense的自定义相机实现的。使用个人版的EasyAR Sense license或使用试用版本的Mega服务时,如果运行时选择了自定义相机,EasyAR每次启动将只能使用100秒。使用付费版本的EasyAR Sense和付费的EasyAR Mega服务没有这个限制。

EasyAR Sense Unity Plugin 暂时还没有支持 AR Foundation 5 的 XROrigin ,因此在AR Foundation 5中,仍需使用 ARSessionOrigin。你也可以自行修改脚本进行支持。

导入 AR Foundation Package

使用Unity Package Manager导入 AR Foundation Unity Package,

../_images/image_g7_1.png

注意:请确保安装你能获取的最新的AR Foundation版本,Unity经常会修复一些bug,有时候这些bug会非常影响使用。上图示意不会跟着AR Foundation发布更新,请以官方版本号为准。

为了在 Android 或 iOS 上使用 AR Foundation,通常还需要导入 ARCore XR PluginARKit XR Plugin Unity package 到工程中。遵循 AR Foundation 介绍 来配置必要的package。

../_images/image_g7_11.png

注意:请确保安装的包的版本一致,在某些情况下,版本号不同会导致AR Foundation工作不正常,Unity并没有合理的自动化的机制来确保这一点。

导入 EasyAR Sense Unity Plugin

通过Unity的 Package Manager window使用本地tarball文件安装插件

../_images/image_s0_1.png

在弹出的对话框中选择 com.easyar.sense-*.tgz 文件。

导入 EasyAR Sense Unity Plugin AR Foundation Extension

通过Unity的 Package Manager window使用本地tarball文件安装插件

../_images/image_g7_10.png

在弹出的对话框中选择 com.easyar.sense.ext.arfoundation-*.tgz 文件。

如在导入这个package之前没有添加 AR Foundation ,它会自动被添加。但是由于Unity的包依赖机制不太完善,添加进的包可能是老版本的,请在包管理中查看并确保

  1. AR Foundation 升级到最新版本,如不是最新版请更新到最新版

../_images/image_g7_12.png
  1. 根据需要添加 ARCore XR PluginARKit XR Plugin ,并保证其版本与 AR Foundation 一致

../_images/image_g7_11.png
  1. 确保安装的 ARCore XR PluginARKit XR Plugin 等版本与 AR Foundation 一致,如不一致需手动更新

../_images/image_g7_13.png ../_images/image_g7_14.png

导入和使用sample

使用Mega时,你需要请阅读 Mega Unity开发样例使用说明 。以下sample使用说明仅针对不使用Mega的情况。

样例随插件包一起分发。可以使用 Unity的 Package Manager window 将样例导入工程中。

../_images/image_g7_15.png

需要注意的是,这些sample不在 EasyAR Sense Unity Plugin 包里面,而在 EasyAR Sense Unity Plugin ARFoundation Extension 包内。

在使用sample之前建议先参考 AR Foundation 介绍 来配置必要的package。建议先运行 Unity官方的AR Foundation sample 来确保AR Foundation可以正常工作。

除了上述差异外,使用方法与其它sample一致,可参考 样例使用说明

Sample简介

使用Mega时,你需要请阅读 Mega Unity开发样例说明

SpatialMap_Building 样例展示了一个非常简单的使用场景,来使SpatialMap功能在AR Foundation环境下工作。

MotionTracking_Fusion 样例展示了一种高级使用,可以在app启动时根据设备能力选择 frame source ,以及允许运行时在所有可用 frame source 间切换。为了实现这种用法,你需要deactive AR Foundation使用的所有GameObject,并设置所有frame source可用性检查所需要的数值,然后在AR Foundation的frame source被选择后active AR Foundation 的GameObject。

../_images/image_g7_9.png

更多说明可以阅读 ARFoundationFrameSource

ImageTracking_MotionFusion 样例展示了在使用AR Foundation时通过 EasyAR 运动融合 来加强图像跟踪功能。这个样例同时演示了如何兼容支持和不支持AR Foundation及其它运动跟踪能力的设备。

在AR Foundation场景中添加EasyAR支持

准备可运行AR Foundation的场景

接下来这一部分假设你有一个已经可以使用AR Foundation的场景。你可以遵循 AR Foundation 介绍 来创建一个可以使用和运行 AR Foundation的场景。

使用Unity Hub创建新工程时选择 AR, Core 就会创建一个这样的场景。

../_images/image_g7_16.png

一个典型的 AR Foundation 场景包含一个 AR Session 和一个 AR Session Origin.

../_images/image_g7_2.png

注意: AR Foundation 通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。

在场景中添加 EasyAR 组件

在场景中添加EasyAR的AR Session。可以使用GameObject菜单中的 EasyAR Sense > Ext: AR Foundation > * 来添加预设好的AR Session。

../_images/image_g7_3.png

如有必要你也可以自己组装AR Session,需要注意在AR Session中包含 ARFoundationFrameSource

为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSourceFirstAvailableActiveChild 并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,

../_images/image_g7_5.png

或者也可以设置 ARComponentPicker.FrameSourceSpecify 并手动指定为 ARFoundationFrameSource

../_images/image_g7_6.png

然后需要在场景中创建 Target 或 Map,比如,如果你需要使用 稀疏空间地图 建图功能,你需要使用 EasyAR Sense > SpatialMap > Map : Sparse SpatialMap 创建 SparseSpatialMapController

../_images/image_g7_4.png

最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g7_8.png

你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。

在EasyAR场景中添加AR Foundation支持

准备可运行EasyAR的场景

接下来这一部分假设你有一个已经可以使用EasyAR的场景。你可以参考 样例使用说明 来使用sample,或参考 从零创建可运行的工程 创建一个全新的场景。

删除Main Camera

AR Foundation内有Camera,大部分情况下需要先删除场景中现有的Camera。

../_images/image_g7_17.png

在一些高级的用法中,你可以根据自己需要判断是否删除。

在场景中添加 EasyAR AR Foundation 支持组件

在AR Session中添加 ARFoundationFrameSource ,选中 AR Session (EasyAR)Frame Source Group ,然后通过菜单 EasyAR Sense > Ext: AR Foundation > Frame Source : AR Foundation 添加。

../_images/image_g7_7.png

ARFoundationFrameSource 移动到第一个。

../_images/image_g7_18.png

在一些高级的用法中,你可以根据自己需要判断它的位置,也可以在代码中修改。

为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSourceFirstAvailableActiveChild 并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,

../_images/image_g7_5.png

或者也可以设置 ARComponentPicker.FrameSourceSpecify 并手动指定为 ARFoundationFrameSource

../_images/image_g7_6.png

在场景中添加 AR Foundation 组件

你可以遵循 AR Foundation 介绍 来添加AR Foundation的组件。

大部分情况下,你需要使用菜单 XR > AR SessionXR > AR Session Origin 添加AR Foundation的组件(如与AR Foundation官方说明冲突,请以官方说明为准)。

../_images/image_g7_19.png

注意: AR Foundation 通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。

最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g7_8.png

你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。

在运行之前,请确保阅读 AR Foundation 介绍 来了解一个有AR Foundation的场景应该如何进行配置和运行。